package com.cruise.game.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cruise.game.model.entity.WithdrawalApplication;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 提现申请Mapper
 *
 * @author cruise
 * @date 2025-02-28
 */
public interface WithdrawalApplicationMapper extends BaseMapper<WithdrawalApplication> {

    /**
     * 统计指定时间范围内的提现申请数量
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 提现申请数量
     */
    int countByTimeRange(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);

    /**
     * 统计指定时间范围内的提现总金额
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 提现总金额
     */
    BigDecimal sumAmountByTimeRange(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);

    /**
     * 统计指定状态的提现申请数量
     *
     * @param status 状态
     * @return 提现申请数量
     */
    int countByStatus(@Param("status") String status);

    /**
     * 统计指定状态和时间范围内的提现申请数量
     *
     * @param status 状态
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 提现申请数量
     */
    int countByStatusAndTimeRange(@Param("status") String status, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);

    /**
     * 统计用户指定状态的提现总金额
     *
     * @param userId 用户ID
     * @param status 状态
     * @return 提现总金额
     */
    BigDecimal sumAmountByUserIdAndStatus(@Param("userId") Long userId, @Param("status") String status);

    /**
     * 统计用户指定状态和时间范围内的提现总金额
     *
     * @param userId 用户ID
     * @param status 状态
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 提现总金额
     */
    BigDecimal sumAmountByUserIdAndStatusAndTimeRange(@Param("userId") Long userId, @Param("status") String status,
                                                      @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);

    /**
     * 统计用户指定状态的提现申请数量
     *
     * @param userId 用户ID
     * @param status 状态
     * @return 提现申请数量
     */
    int countByUserIdAndStatus(@Param("userId") Long userId, @Param("status") String status);
}